#ifndef _HIST_TABLE_H_
#define _HIST_TABLE_H_

#include <string>
#include <vector>
#include <iostream>
#include <sstream>

// заголовочные файлы MySQL должны следовать после заголовочных файлов библиотеки STL
// иначе возникают проблемы в компиляции
#include <my_global.h>
#include <mysql.h>

#include <stdlib.h>

/**
  \brief Класс-кортеж для таблицы истории
  */
struct HistRow
{
    int src;
    int dest;
    std::string msg;
};

/**
  \brief Класс-обработчик СУБД MySQL для приложения
  */
class AppMySql
{
public:
    AppMySql();
    ~AppMySql();

    //! \brief Подключение к базе данных
    bool connectToDatabase(const char *pchHost,
                           const char *pchUser,
                           const char *pchPassword,
                           const char *pchDbName);

    //! \brief Общий вариант SQL-запроса к базе данных
    bool query_to_database(const char *pchQuery);

    //! \brief Проверка существования таблицы истории в БД
    bool hist_table_exists();
    //! \brief Создание таблицы истории в БД
    bool hist_table_create();
    //! \brief Удаление таблицы истории из БД
    bool hist_table_drop();

    //! \brief Выполнение SELECT к таблице истории в БД
    bool hist_table_select(std::vector<HistRow> &vec, const char *pchSelectQuery = 0);
    //! \brief Выполнение INSERT к таблице истории в БД
    bool hist_table_insert(HistRow &hr);
    //! \brief Заполнение кортежа для выполения INSERT к таблице истории в БД
    void hist_table_fill_row(HistRow &hr, int src, int dest, const char *pchMsg);

    //! \brief Возвращает имя таблицы истории
    std::string histTableName() { return m_sHistTableName; }
private:
    MYSQL *m_pMySqlSocket;
    bool m_bDbReady;        // флаг готовности базы данных
    bool m_bHistTableReady; // флаг готовности таблицы истории

    std::string m_sDbName;
    std::string m_sHistTableName;
};

#endif

